html
c
xml
python
mysql
linux
xcode
android
regex
visual-studio
silverlight
flash
json
oracle
cocoa
tsql
delphi
asp
api
The leak occurred in the didStartElement method. I was copying elementName without releasing it.
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ NewsCurrentElement = [[elementName copy] autorelease]; if ([elementName isEqualToString:NewsItemType]) { // clear out our story item caches... NewsItem = [[NSMutableDictionary alloc] init]; NewsCurrentElement1 = [[NSMutableString alloc] init]; NewsCurrentElement2 = [[NSMutableString alloc] init]; if(NewsNumElements == 3) { NewsCurrentElement3 = [[NSMutableString alloc] init]; } } }
You might also want to release (if necessary) the allocated NSMutableString properties before allocating another NSMutableString into the property like so:
NSMutableString
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if (NewsCurrentElement) { [NewsCurrentElement release], NewsCurrentElement = nil; } NewsCurrentElement = [[elementName copy] autorelease]; if ([elementName isEqualToString:NewsItemType]) { // clear out our story item caches... if (NewsItem) { [NewsItem release], NewsItem = nil; } NewsItem = [[NSMutableDictionary alloc] init]; if (NewsCurrentElement1) { [NewsCurrentElement1 release], NewsCurrentElement1 = nil; } NewsCurrentElement1 = [[NSMutableString alloc] init]; if (NewsCurrentElement2) { [NewsCurrentElement2 release], NewsCurrentElement2 = nil; } NewsCurrentElement2 = [[NSMutableString alloc] init]; if(NewsNumElements == 3) { if (NewsCurrentElement3) { [NewsCurrentElement3 release], NewsCurrentElement3 = nil; } NewsCurrentElement3 = [[NSMutableString alloc] init]; } } }